package com.weijian.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * 文件存储服务接口
 */
public interface FileStorageService {

    /**
     * 保存上传的CSV文件
     *
     * @param file      上传的文件
     * @param batchId   批次ID
     * @param fileType  文件类型 (route/shipment/network/cooperation)
     * @return 保存的文件路径
     * @throws IOException 文件保存失败时抛出
     */
    String saveCsvFile(MultipartFile file, Integer batchId, String fileType) throws IOException;

    /**
     * 根据批次ID获取所有文件
     *
     * @param batchId 批次ID
     * @return 文件列表
     */
    List<File> getFilesByBatchId(Integer batchId);

    /**
     * 获取指定文件
     *
     * @param batchId  批次ID
     * @param fileType 文件类型
     * @return 文件对象
     */
    File getFile(Integer batchId, String fileType);

    /**
     * 复制文件到目标目录
     *
     * @param batchId      批次ID
     * @param fileType     文件类型
     * @param targetDir    目标目录
     * @return 目标文件路径
     * @throws IOException 复制失败时抛出
     */
    String copyFileToDirectory(Integer batchId, String fileType, File targetDir) throws IOException;

    /**
     * 复制批次所有文件到目标目录
     *
     * @param batchId   批次ID
     * @param targetDir 目标目录
     * @throws IOException 复制失败时抛出
     */
    void copyAllFilesToDirectory(Integer batchId, File targetDir) throws IOException;

    /**
     * 删除批次所有文件
     *
     * @param batchId 批次ID
     */
    void deleteBatchFiles(Integer batchId);

    /**
     * 获取文件存储根目录
     *
     * @return 根目录路径
     */
    String getStorageRoot();
}
